home *** CD-ROM | disk | FTP | other *** search
/ Workbench Add-On / Workbench Add-On - Volume 1.iso / BBS-Archive / Comm / AmiTCP30b2.lha / src / appl / qwriter / main.c < prev    next >
C/C++ Source or Header  |  1993-08-10  |  4KB  |  203 lines

  1. static const char version[] = "$VER: qwriter 2.0 (13.8.93)";
  2.  
  3. /* 
  4.  * Contains main() for qwriter
  5.  * $Header: /u/opi/86/jraja/ohtatcp/amitcp/util/qwriter/RCS/main.c,v 2.2 1993/08/10 20:46:23 jraja Exp $
  6.  * $Log: main.c,v $
  7.  * Revision 2.2  1993/08/10  20:46:23  jraja
  8.  * Added version string.
  9.  *
  10.  * Revision 2.1  1993/04/20  18:48:04  puhuri
  11.  * Table for distribution was too small by one.
  12.  *
  13.  * Revision 2.0  93/03/20  17:31:42  17:31:42  ppessi (Pekka Pessi)
  14.  * initial netlib version..
  15.  * 
  16.  * Revision 1.7  93/03/19  16:49:42  16:49:42  puhuri (Markus Peuhkuri)
  17.  * Add possibility to make non-uniform distribution of length of
  18.  * replied data in telnet-server.
  19.  * 
  20.  * Revision 1.6  93/03/19  14:44:43  14:44:43  puhuri (Markus Peuhkuri)
  21.  * Add modifications made by too and ppessi.
  22.  * 
  23.  * Revision 1.5  93/03/16  19:13:59  19:13:59  too (Tomi Ollila)
  24.  * code fixes
  25.  * 
  26.  * Revision 1.4  93/03/16  10:42:28  10:42:28  puhuri (Markus Peuhkuri)
  27.  * Added AmiTCP stuff.
  28.  * 
  29.  * Revision 1.3  93/03/15  18:59:27  18:59:27  puhuri (Markus Peuhkuri)
  30.  * Cleaned code
  31.  * 
  32.  */
  33.  
  34. #ifdef AMIGA
  35. #include <exec/types.h>
  36. #include <sys/types.h>
  37. #if __SASC
  38. #include <proto/socket.h>
  39. #elif __GNUC__
  40. #include <inline/socket.h>
  41. #else
  42. #include <clib/socket_protos.h>
  43. #endif
  44. #endif /* AMIGA */
  45.  
  46. #ifdef __STDC__
  47. #include <stdlib.h>
  48. #endif
  49.  
  50. #include <stdio.h>
  51.  
  52. #include <sys/types.h>
  53. #include <sys/socket.h>
  54. #include <sys/ioctl.h>
  55.  
  56. #include <netinet/in.h>
  57.  
  58. #include <stdio.h>
  59. #include "qwriter.h"
  60.  
  61. #include <string.h>        /* after qwriter.h */
  62.  
  63. #define TEST_NFS 1
  64. #define TEST_FTP 2
  65. #define TEST_TELNET 3
  66. #define SERVER 1
  67. #define CLIENT 2
  68. #define FALSE 0
  69. #define TRUE 1
  70.  
  71. char *failure(char *txt)
  72. {
  73.   fprintf(stderr,txt);exit(1);return "F";
  74. }
  75.  
  76. int
  77. main(int argc,char **argv)
  78. {
  79.   int i;
  80.   int act = SERVER,        /* Some reasionable values */
  81.   type = TEST_TELNET,
  82.   rounds = 1,
  83.   length = 1000,
  84.   bufsiz = BUFFERLEN,
  85.   port1 = 1500,
  86.   port2 = 1501,
  87.   chk = FALSE,
  88.   *dtable = NULL;
  89.   char *host = "127.0.0.1";    /* "localhost" */
  90.   double tval = NFSTIMEOUT;
  91.  
  92. #ifdef NODB
  93.   MyHost = host;
  94. #endif
  95. #define ARG2 ((i < argc -1) ? argv[++i] :failure("Missign argument"))
  96.   for(i = 1 ; i < argc; i++)
  97.     if(*argv[i] == '-'){
  98.       switch(*(argv[i]+1)){
  99.       case 's':            /* We are server */
  100.     act = SERVER;
  101.     break;
  102.       case 'c':            /* We are client */
  103.     act = CLIENT;
  104.     break;
  105.       case 't':
  106.     switch(*ARG2){        /* Store type of test */
  107.     case 't':
  108.       type = TEST_TELNET;
  109.       break;
  110.     case 'n':
  111.       type = TEST_NFS;
  112.       break;
  113.     case 'f':
  114.       type = TEST_FTP;
  115.       break;
  116.     default:
  117.       failure("unknown type\n");
  118.     }
  119.     break;
  120.       case 'n':            /* Rounds in test */
  121.     rounds = atoi(ARG2);
  122.     break;
  123.       case 'l':            /* Length argument */
  124.     length = atoi(ARG2);
  125.     break;
  126.       case 'b':            /* Size of buffer */
  127.     bufsiz = atoi(ARG2);
  128.     break;
  129.       case 'p':            /* Port number */
  130.     port1 = atoi(ARG2);
  131.     break;
  132.       case 'h':            /* Name of host */
  133.     host = ARG2;
  134. #ifdef NODB
  135.     MyHost = host;
  136. #endif    
  137.     break;
  138.       case 'q':            /* Checksum verification */
  139.     chk = TRUE;
  140.     break;
  141.       case 'd':            /* Distribution of characters */
  142.     {
  143.       int j, k;
  144.       char *p,*p0;
  145.  
  146.       p0 = ARG2;
  147.       for(j=1, p = p0 - 1 ; p = strchr( p + 1, ','); j++)
  148.         ;
  149.       if(dtable = (int *)malloc((j + 1) * sizeof(int))){
  150.         dtable[0] = j + 1;
  151.         for(k = 1, p = p0; k <= j + 1; k++){
  152.           dtable[k] = atoi(p);
  153.           p = strchr(p, ',') + 1;
  154.           DP(("%ld,", dtable[k]));
  155.         }
  156.       }
  157.     }
  158.     break;
  159.       case 'T':            /* Timeout value */
  160.     tval = atof(ARG2);
  161.     break;
  162.       }
  163.     }
  164.   printf("act=%ld type=%ld rounds=%ld length=%ld bufsiz=%ld\n",
  165.      act, type, rounds, length, bufsiz);
  166.   printf("port1=%ld port2=%ld chk=%ld host='%s' tval=%lf\n",
  167.      port1, port2, chk, host, tval);
  168.  
  169.   if(act == SERVER)
  170.     switch(type){
  171.     case TEST_TELNET:
  172.       if(!dtable)
  173.     if((dtable=(int *)malloc(2 * sizeof(int)))==NULL)
  174.       break;
  175.     else {
  176.       dtable[0] = 1;
  177.       dtable[1] = length;
  178.     }
  179.       telnet_server(port1, dtable, chk);
  180.       break;
  181.     case TEST_FTP:
  182.       ftp_server(port1, bufsiz, chk);
  183.       break;
  184.     case TEST_NFS:
  185.       nfs_server(host, port1, bufsiz, length, chk);
  186.       break;
  187.     }
  188.   else
  189.     switch(type){
  190.     case TEST_TELNET:
  191.       telnet_client(host, port1, rounds, bufsiz, chk);
  192.       break;
  193.     case TEST_FTP:
  194.       ftp_client(host, port1, length, bufsiz, chk);
  195.       break;
  196.     case TEST_NFS:
  197.       nfs_client(host, port1, rounds, length, bufsiz, tval, chk);
  198.       break;
  199.     }
  200.   if(dtable)
  201.     free(dtable);
  202. }
  203.